<?php

class SzamlaegyenlegekController extends AppController {

	var $name = 'Szamlaegyenlegek';
	//var $scaffold;
	var $uses = array('Szamlaegyenleg', 'Gyujto', 'Osztaly');
	
	function isAuthorized(){
		if($this->Auth->user('csoport') == 1){		//admin jogosultságú júzerek
			return true;
		}
		elseif($this->Auth->user('csoport') == 2){	//könyvelők
			return true;
		}
		return false;		//minden más tiltva
	}

/**
 * Számlák egyenlegeinek újraszámítás a könyvelt tételek alapján
 * elvileg erre a funkcióra nincs szükség az éles futás alatt
 *
 * @param tipus az egyenlegszámítás típusa: ceg vagy osztaly vagy mind
 * @return nothing
 */
	function ujraszamol(){
		//először ürítjük a számlaegyenlegek táblát
		$this->Szamlaegyenleg->query('TRUNCATE TABLE `szamlaegyenlegek`');
		
		$nincsCeg = $this->Setting->getRow('nincs_ceg_id');
		$nincsCeg = $nincsCeg['Setting']['value'];
		$nincsOsztaly = $this->Setting->getRow('nincs_osztaly_id');
		$nincsOsztaly = $nincsOsztaly['Setting']['value'];
		
		//céges egyenlegek újraszámítása a tételek tábla alapján
		//céges egyenleg esetén a ceg_id a ceg gyüjtője, az osztaly_id = 1
		
		//végigmegyünk az összes cégen
		$cegGyujto = $this->Setting->getRow('ceg_gyujtotipusId');
		//debug($cegGyujto);
		$cegek = $this->Gyujto->find('all',
											  array(
													'fields' => 'id',
													'conditions' => array('gyujtotipus_id' => $cegGyujto['Setting']['value']),
													'recursive' => -1
												  )
											  );
		foreach($cegek as $ceg){
			if($ceg['Gyujto']['id'] != $nincsCeg){
				$sql = "INSERT INTO szamlaegyenlegek (ceg_id, osztaly_id, szamla_id, ev, tegyenleg, kegyenleg)
						SELECT ".$ceg['Gyujto']['id']." AS ceg_id, $nincsOsztaly AS osztaly_id, tartozik.id AS szamla_id, ".$this->Session->read('Settings.ev')." AS ev, tegyenleg, kegyenleg
							FROM
								(SELECT *
									FROM
										(SELECT id
											FROM szamlak
											WHERE ev IN (0, ".$this->Session->read('Settings.ev').")
										) AS szamlak

								LEFT JOIN

									(SELECT t AS tartozik, SUM( osszeg ) AS tegyenleg
										FROM v_ceg".$ceg['Gyujto']['id']."_tetelek AS tetelek, bizonylatok
										WHERE tetelek.bizonylat_id = bizonylatok.id
										AND bizonylatok.datum BETWEEN '".$this->Session->read('Settings.ev')."-01-01' AND '".$this->Session->read('Settings.ev')."-12-31'
										AND tetelek.spec != 'd'
										GROUP BY t
									) AS tart

								ON szamlak.id = tart.tartozik
								) as tartozik

							LEFT JOIN

							(SELECT k AS kovetel, SUM( osszeg ) AS kegyenleg
								FROM v_ceg".$ceg['Gyujto']['id']."_tetelek AS tetelek, bizonylatok
								WHERE tetelek.bizonylat_id = bizonylatok.id
								AND bizonylatok.datum BETWEEN '".$this->Session->read('Settings.ev')."-01-01' AND '".$this->Session->read('Settings.ev')."-12-31'
								AND tetelek.spec != 'd'
								GROUP BY k
							) AS kovetel

						ON tartozik.id = kovetel.kovetel
						WHERE (tartozik IS NOT NULL OR kovetel IS NOT NULL)";
				$this->Szamlaegyenleg->query($sql);
			}
		}
		
		//osztályonkénti egyenlegek újraszámítása
		$osztalyok = $this->Osztaly->find('all',
											  array(
													'fields' => 'id',
													'recursive' => -1
												  )
											  );
		foreach($osztalyok as $osztaly){
			if($osztaly['Osztaly']['id'] != $nincsOsztaly){
				$sql = "INSERT INTO szamlaegyenlegek (ceg_id, osztaly_id, szamla_id, ev, tegyenleg, kegyenleg)
						SELECT $nincsCeg AS ceg_id, ".$osztaly['Osztaly']['id']." AS osztaly_id, tartozik.id AS szamla_id, ".$this->Session->read('Settings.ev')." AS ev, tegyenleg, kegyenleg
							FROM
								(SELECT *
									FROM
										(SELECT id
											FROM szamlak
											WHERE ev IN (0, ".$this->Session->read('Settings.ev').")
										) AS szamlak

								LEFT JOIN

									(SELECT t AS tartozik, SUM( osszeg ) AS tegyenleg
										FROM v_osztaly".$osztaly['Osztaly']['id']."_tetelek AS tetelek, bizonylatok
										WHERE tetelek.bizonylat_id = bizonylatok.id
										AND bizonylatok.datum BETWEEN '".$this->Session->read('Settings.ev')."-01-01' AND '".$this->Session->read('Settings.ev')."-12-31'
										AND tetelek.spec != 'd'
										GROUP BY t
									) AS tart

								ON szamlak.id = tart.tartozik
								) as tartozik

							LEFT JOIN

							(SELECT k AS kovetel, SUM( osszeg ) AS kegyenleg
								FROM v_osztaly".$osztaly['Osztaly']['id']."_tetelek AS tetelek, bizonylatok
								WHERE tetelek.bizonylat_id = bizonylatok.id
								AND bizonylatok.datum BETWEEN '".$this->Session->read('Settings.ev')."-01-01' AND '".$this->Session->read('Settings.ev')."-12-31'
								AND tetelek.spec != 'd'
								GROUP BY k
							) AS kovetel

						ON tartozik.id = kovetel.kovetel
						WHERE (tartozik IS NOT NULL OR kovetel IS NOT NULL)";
				//debug($sql);
				$this->Szamlaegyenleg->query($sql);
			}
		}
		$this->redirect('/');
	}	
}
?>